package com.th.coupon.service;

import com.th.coupon.common.exception.BaseCloudException;
import com.th.coupon.entity.Coupon;

import java.util.List;

/**
 * 优惠卷redis缓存服务 主要根据优惠卷的状态
 * @author 涂航
 */
public interface IRedisService {


    /***
     * 根据用户id以及优惠卷状态查询redis中的优惠卷信息
     * @param userId
     * @param status
     * @return {@link Coupon} ps:可能会返回 null, 代表从没有过记录
     */
    List<Coupon> getCachedCoupons(Long userId,Integer status);

    /**
     * 保存空的优惠卷列表到缓存  预先准备空集合，解决缓存穿透问题
     * @param userId
     * @param status
     */
    void saveEmptyCouponListToCache(Long userId,List<Integer> status);

    /**
     * 尝试从cache中获取一个优惠卷码 当然获取的可能为空
     * @param templateId
     * @return {@link String} 优惠卷码
     */
    String tryToAcquireCouponCodeFromCache(Integer templateId);

    /**
     * 保存优惠卷到缓存
     * @param userId 用户id
     * @param coupons 优惠卷集合 可能是一个也可能是多个
     * @param status 优惠卷状态
     * @return {@link Integer} 保存成功的个数
     * @throws BaseCloudException
     */
    Integer addCouponToCache(Long userId,List<Coupon> coupons,Integer status) throws BaseCloudException;
}
